import axios from "axios";
import { ElMessage } from "element-plus";

// axios创建实例
const instance = axios.create({
  baseURL: "http://pudge.wang:9999",
  // 超时时间
  timeout: 10000,
  // headers: {'X-Custom-Header': 'foobar'}
  headers: { "Content-Type": "application/json" },
});

// 添加请求拦截器
instance.interceptors.request.use(
  function (config) {
    // 在发送请求之前调用
    // console.log(config);

    // 1. 请求拦截最常见的事就是在这里统一添加token
    config.headers.token = localStorage.getItem("token");

    // 2. 根据特定的接口地址，去为那个接口修改专门的请求头
    // if (config.url === "/upload") {}

    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 对响应数据做点什么
    // 每次请求结束的时候调用
    // console.log("111", response);
    // 响应拦截里面return的东西，就是下面请求里面.then接受到的内容

    // 1. 可以在响应拦截里面返回data

    // 2. 还可以在这里直接操作状态码，报一些状态码错误
    if (response.data.code === "200") {
      return response.data;
    } else if (response.data.code === "999") {
      // 跳转
    } else {
      ElMessage.error(response.data.message);
    }
  },
  function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);

const request = {
  get(url: string, params?: object) {
    return instance
      .get(url, {
        params,
      })
      .then((response) => {
        return response;
      })
      .catch((err) => {
        ElMessage.error(err.message);
      });
  },
  post(url: string, data?: object) {
    return instance
      .post(url, data)
      .then((response) => {
        // data才是要的数据
        // console.log(response);
        return response;
      })
      .catch((err) => {
        ElMessage.error(err.message);
      });
  },
};

export default request;
